/**
 * 主题色工具函数
 * @author Wu.Liang
 * @date 2025-01-21
 * @description 提供主题色获取和管理的工具函数，遵循UI设计规范
 */

// 主题色配置
const THEME_COLORS = {
  // 查询/搜索类功能
  search: '#3498db',
  query: '#3498db',
  view: '#3498db',
  
  // 工具/操作类功能
  tools: '#ff9500',
  operation: '#ff9500',
  setting: '#ff9500',
  repair: '#ff9500',
  
  // 列表/记录类功能
  list: '#2ed573',
  record: '#2ed573',
  history: '#2ed573',
  my: '#2ed573',
  
  // 支付/财务类功能
  payment: '#3742fa',
  finance: '#3742fa',
  'credit-card': '#3742fa',
  money: '#3742fa',
  
  // 通知/公告类功能
  notice: '#ff4757',
  announcement: '#ff4757',
  'file-text': '#ff4757',
  message: '#ff4757',
  
  // 联系/沟通类功能
  contact: '#27ae60',
  phone: '#27ae60',
  communication: '#27ae60',
  service: '#27ae60',
  
  // 安全/防护类功能
  security: '#e74c3c',
  shield: '#e74c3c',
  protect: '#e74c3c',
  
  // 社区/活动类功能
  community: '#9b59b6',
  activity: '#9b59b6',
  event: '#9b59b6',
  
  // 停车/车辆类功能
  parking: '#f39c12',
  car: '#f39c12',
  vehicle: '#f39c12',
  
  // 紧急/求助类功能
  emergency: '#e74c3c',
  help: '#e74c3c',
  sos: '#e74c3c',
  
  // 投诉/建议类功能
  complaint: '#e67e22',
  suggestion: '#e67e22',
  feedback: '#e67e22',
  
  // 更多/扩展类功能
  more: '#95a5a6',
  expand: '#95a5a6',
  other: '#95a5a6'
}

// 功能类型到主题色的映射
const FUNCTION_TYPE_COLORS = {
  query: 'search',
  search: 'search',
  view: 'search',
  tools: 'tools',
  operation: 'tools',
  setting: 'tools',
  repair: 'tools',
  list: 'list',
  record: 'list',
  history: 'list',
  my: 'list',
  payment: 'payment',
  finance: 'payment',
  'credit-card': 'payment',
  money: 'payment',
  notice: 'notice',
  announcement: 'notice',
  'file-text': 'notice',
  message: 'notice',
  contact: 'contact',
  phone: 'contact',
  communication: 'contact',
  service: 'contact',
  security: 'security',
  shield: 'security',
  protect: 'security',
  community: 'community',
  activity: 'community',
  event: 'community',
  parking: 'parking',
  car: 'parking',
  vehicle: 'parking',
  emergency: 'emergency',
  help: 'emergency',
  sos: 'emergency',
  complaint: 'complaint',
  suggestion: 'complaint',
  feedback: 'complaint',
  more: 'more',
  expand: 'more',
  other: 'more'
}

/**
 * 获取主题色
 * @param {string} key - 主题色键名
 * @returns {string} 主题色值
 */
export function getThemeColor(key) {
  return THEME_COLORS[key] || THEME_COLORS.more
}

/**
 * 根据功能类型获取主题色
 * @param {string} functionType - 功能类型
 * @returns {string} 主题色值
 */
export function getFunctionThemeColor(functionType) {
  const themeKey = FUNCTION_TYPE_COLORS[functionType]
  return themeKey ? getThemeColor(themeKey) : getThemeColor('more')
}

/**
 * 根据图标名称获取主题色
 * @param {string} iconName - 图标名称
 * @returns {string} 主题色值
 */
export function getIconThemeColor(iconName) {
  return getFunctionThemeColor(iconName)
}

/**
 * 获取所有主题色
 * @returns {Object} 所有主题色配置
 */
export function getAllThemeColors() {
  return { ...THEME_COLORS }
}

/**
 * 获取功能类型映射
 * @returns {Object} 功能类型到主题色的映射
 */
export function getFunctionTypeColors() {
  return { ...FUNCTION_TYPE_COLORS }
}

/**
 * 验证主题色是否有效
 * @param {string} color - 颜色值
 * @returns {boolean} 是否有效
 */
export function isValidThemeColor(color) {
  return Object.values(THEME_COLORS).includes(color)
}

/**
 * 根据颜色值获取主题色名称
 * @param {string} color - 颜色值
 * @returns {string} 主题色名称
 */
export function getThemeColorName(color) {
  for (const [name, value] of Object.entries(THEME_COLORS)) {
    if (value === color) {
      return name
    }
  }
  return 'more'
}

/**
 * 生成服务卡片配置
 * @param {Object} config - 卡片配置
 * @param {string} config.title - 标题
 * @param {string} config.description - 描述
 * @param {string} config.iconName - 图标名称
 * @param {string} [config.themeColor] - 自定义主题色
 * @param {boolean} [config.disabled] - 是否禁用
 * @param {boolean} [config.loading] - 是否加载中
 * @param {boolean} [config.showArrow] - 是否显示箭头
 * @param {string} [config.badge] - 徽章文本
 * @param {string} [config.badgeIcon] - 徽章图标
 * @param {string} [config.badgeColor] - 徽章颜色
 * @returns {Object} 完整的卡片配置
 */
export function generateServiceCardConfig(config) {
  const {
    title,
    description,
    iconName,
    themeColor,
    disabled = false,
    loading = false,
    showArrow = true,
    badge = '',
    badgeIcon = 'info-circle',
    badgeColor = '#ff4757'
  } = config

  return {
    title,
    description,
    iconName,
    themeColor: themeColor || getIconThemeColor(iconName),
    disabled,
    loading,
    showArrow,
    badge,
    badgeIcon,
    badgeColor
  }
}

/**
 * 生成服务列表配置
 * @param {Array} services - 服务配置数组
 * @returns {Array} 完整的服务列表配置
 */
export function generateServiceListConfig(services) {
  return services.map(service => {
    if (typeof service === 'string') {
      // 如果是字符串，使用默认配置
      return generateServiceCardConfig({
        title: service,
        description: '',
        iconName: service
      })
    }
    
    // 如果是对象，使用自定义配置
    return generateServiceCardConfig(service)
  })
}

// 默认导出
export default {
  getThemeColor,
  getFunctionThemeColor,
  getIconThemeColor,
  getAllThemeColors,
  getFunctionTypeColors,
  isValidThemeColor,
  getThemeColorName,
  generateServiceCardConfig,
  generateServiceListConfig
}
